rpc-sys: packagelist: handle ABI versions in apk world properly
authorEric Fahlgren <[email protected]>
Mon, 29 Sep 2025 20:19:44 +0000 (13:19 -0700)
committerEric Fahlgren <[email protected]>
Mon, 29 Sep 2025 20:54:07 +0000 (13:54 -0700)
It was originally assumed that all entries in '/etc/apk/world'
would have ABI-versioned package names.  This turns out to be false,
and apk happily adds package names with or without the ABI version
suffix.  This causes the output from 'ubus call rpc-sys packagelist'
to exclude some packages from the user-installed package list,
thus causing them to disappear when doing an ASU build.

Fix it by checking both versioned and unversioned package names.

Link: https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035/744
Fixes: https://github.com/efahl/owut/issues/49
Signed-off-by: Eric Fahlgren <[email protected]>
sys.c

diff --git a/sys.c b/sys.c
index 75fae4853b9906640738f69a5710e21964a820c3..fd7ad3be9f7dc4b5b966ca0a673cc1a4e82c8202 100644 (file)
--- a/sys.c
+++ b/sys.c
@@ -318,10 +318,16 @@ rpc_sys_packagelist(struct ubus_context *ctx, struct ubus_object *obj,
                        break;
                default:
                        if (is_blank(line)) {
-                               if (pkg[0] && ver[0] && is_all_or_world(pkg, world)) {
-                                       if (abi[0])
+                               if (pkg[0] && ver[0]) {
+                                       /* Need to check both ABI-versioned and non-versioned pkg */
+                                       bool keep = is_all_or_world(pkg, world);
+                                       if (abi[0]) {
                                                pkg[strlen(pkg)-strlen(abi)] = '\0';
-                                       blobmsg_add_string(&buf, pkg, ver);
+                                               if (!keep)
+                                                       keep = is_all_or_world(pkg, world);
+                                       }
+                                       if (keep)
+                                               blobmsg_add_string(&buf, pkg, ver);
                                }
                                abi[0] = pkg[0] = ver[0] = '\0';
                        }